package com.huiying.entity.entity;

import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * @Author: lsh
 * @Date: 2024/10/24/23:24
 * @Description: 会话
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Conversation implements Serializable {

    private static final long serialVersionUID = 1L;

    @JsonSerialize(using = ToStringSerializer.class)
    private Long id; // 会话ID，主键

    // 用户ID 1 和 用户ID 2：
    // 建议固定存储顺序，例如 always store the smaller ID in user1Id and larger ID in user2Id
    // 这样方便查询和确保唯一性
    @JsonSerialize(using = ToStringSerializer.class)
    private Long user1Id; // 会话参与者之一 (通常是 ID 较小的那个)
    @JsonSerialize(using = ToStringSerializer.class)
    private Long user2Id; // 会话参与者之二 (通常是 ID 较大的那个)

    // 上一条消息的时间戳，用于排序会话列表
    private LocalDateTime lastMessageAt;

    // 未读消息数 (可以针对每个用户分别维护)
    // private Integer user1UnreadCount;
    // private Integer user2UnreadCount;

    // 创建时间 (会话的创建时间)
    private LocalDateTime createdTime;

    // 修改时间 (通常是 lastMessageAt 更新时更新)
    private LocalDateTime updatedTime;

    // 可选：会话状态，例如 ACTIVE, ARCHIVED, DELETED
    // private String status;
    @TableField(exist = false) // 告诉MyBatis-Plus，这个字段在数据库表中不存在
    @JsonSerialize(using =ToStringSerializer.class)
    private Long partnerId;      // 聊天对方的ID

    @TableField(exist = false)
    private String partnerName;    // 对方的昵称

    @TableField(exist = false)
    private String partnerAvatar;  // 对方的头像URL

    @TableField(exist = false)
    private String lastMessage;    // 最后一条消息的内容
}
